package ar.edu.utn.frba.tacs.warnes.beans;

import ar.edu.utn.frba.tacs.warnes.utils.ConstantesWarnes;

/**
 * Clase para los metodos genericos de los AbmBeans
 * 
 * @author dmiglino
 */
public abstract class BaseAbmBean<T> extends BaseBean {
	public T object;

	public T getObject() {
		leerNuevoObjeto();
		return this.object;
	}

	public void setObject(T object) {
		this.object = object;
	}

	/**
	 * Obtiene la entity de la sesion, la setea en el object del abm, y
	 * finalmentela borra de la sesion.
	 */
	@SuppressWarnings("unchecked")
	protected void leerNuevoObjeto() {
		if (getFromSession(ConstantesWarnes.ENTITY) != null) {
			setObject((T) getFromSession(ConstantesWarnes.ENTITY));
			removeFromSession(ConstantesWarnes.ENTITY);
		}
	}

	private Boolean alta = false;

	public Boolean isAlta() {
		return this.alta;
	}

	public void setAlta(Boolean alta) {
		this.alta = alta;
	}

	public Boolean getAlta() {
		this.setAlta((Boolean) getFromSession(ConstantesWarnes.ALTA));
		initObject();
		return this.alta;
	}

	protected abstract void initObject();

	/**
	 * Graba el alta
	 */
	public String actionAceptar() {
		removeFromSession(ConstantesWarnes.ALTA);
		setObject(null);
		return "aceptar";
	}

	/**
	 * Cancela el alta
	 */
	public String actionCancelar() {
		removeFromSession(ConstantesWarnes.ALTA);
		doBeforeCancelar();
		setObject(null);
		return "cancelar";
	}

	protected abstract void doBeforeCancelar();

	@Override
	public String actionVolver() {
		setObject(null);
		return super.actionVolver();
	}
}
